home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / hard / drivr / a4091patch2.lha / A4091PATCH / A4091Patch.doc < prev    next >
Text File  |  1992-11-10  |  9KB  |  175 lines

  1.  
  2.                              A4091Patch V39.1
  3.                             ------------------
  4.  
  5.                            Copyright (c) 1992 by
  6.  
  7.                        Giuliano C. Peritore (ETI020)
  8.                    Via Amaseno,6 - 04100 Latina - ITALY
  9.                          E-Mail: mc6040@mclink.it
  10.  
  11.  
  12. Important !
  13. -----------
  14. There was a bug in A4091PATCH Version 39.1.  Some Forbid()s and Permit()s
  15. were commented out.  Now they have been reactivated.  If you  find  some-
  16. where versions 39.1 please replace with version 39.2 !!!  Thank You
  17.  
  18. Disclaimer
  19. ----------
  20. The entire risk as to the use of this program is assumed by the user.  In
  21. no event will the  author be liable for any direct, indirect, incidental,
  22. or consequential damages derived from the use of this program.  This pro-
  23. gram is not authorized for use in medical applications, including but not
  24. limited to, use in life support devices.
  25. This application hasn't been tested too much but it should work properly.
  26.  
  27.  
  28. Copyright
  29. ---------
  30. This program was written by Giuliano C.  Peritore.  All  rights reserved.
  31. It may be distributed in any form, but not for  commercial purposes.  Do-
  32. nations are highly welcomed.  Explicit permission is given to  Fred  Fish
  33. and Hyper Media Concpets to include this work in their disks.   Commodore
  34. is also authorized to use it whenever it may be useful.  Source  code  is
  35. available upon request.
  36.  
  37.  
  38. Configuration
  39. -------------
  40. This program was developed on a stock A4000 with 4MB of Fast RAM, 2 MB of
  41. Chip RAM, IDE 120MB HD, A2088 XT board not binded (with binddrivers),  an
  42. A2091  SCSI  interface populated with 512 K  of Fast RAM, 7.0 ROMS, and a
  43. Quantum LP52s hard drive.  A Toshiba 3301B CDROM was connected but turned
  44. off.  The program worked fine with this configuration,  but  I  think  it
  45. will  work on A3000s and or A2091s with 6.6 ROMs.  Amiga OS 3.0 is requi-
  46. red.
  47.  
  48.  
  49. Why this patch
  50. --------------
  51. When I plugged an A2091 SCSI board in my A4000  I  noticed  that transfer
  52. speeds between Zorro III memory (outside the  24bit range)  and  A2091 HD
  53. were astonishingly low and used all CPU time.  I had  this  problem  also
  54. with my CD ROM, using CDROM File System from Canadian Prototype Replicas.
  55. I thought that it was a problem with A2091's 6.6 ROMs, since someone told
  56. me that they used processor polled I/O on A4000.  So I got 7.0  ROMs  and
  57. also 512K of fast RAM to install  in  my  A2091 in order to provide newer
  58. ROMs and some 24bit DMAble memory.  But this didn't work.
  59. When I noticed that transfers to Chip RAM were fast and used not much CPU
  60. time I tried to move HD and CD buffers to 24bit memory.  First I modified
  61. the mountlist of the CDROM, setting BufMemType=512 (MEMF_24BITDMA).  This
  62. speeded up the CD and freed some CPU time.  But I wasn't able to make the
  63. FastFileSystem put his buffers in 24bit DMAble memory.  I tried making  a
  64. mountlist and/or changing the BufMemType field  in the Environment  stru-
  65. cture in hard disk's Rigid Disk Block.  But it had no effect.
  66. Bothered with this fact,that I had correct DMA fast transfers in CHIP and
  67. A2091's  FAST  RAMs  and processor polled very very slow I/O to Zorro III
  68. memory, plus sometimes strange  errors with  CPU polled I/O, I decided to
  69. make an OS patch.  The errors that  I was getting sometimes were not R/W,
  70. nor 'bad block checksum' errors.  It was the data coming from HD that was
  71. missing some bytes here and there.
  72. My idea was that DMA transfer towards a DMAble memory buffer, followed by
  73. CPU copy from that buffer to Zorro III memory, was surely faster than CPU
  74. polled I/O, and should  eat  less  CPU  time.  I was right.  Through some
  75. testing with DiskSpeed I noticed that my patch provided in Longword  ali-
  76. gned transfers to A2091 memory ten times the old transfer rate plus eight
  77. time less CPU time used.
  78.  
  79.  
  80. Why 'A4091patch'
  81. ----------------
  82. Now I had a working beta release, and I had only to make it a bit more u-
  83. sable and to find a name for it.  So  I  added Shell and WB support and a
  84. meaningful name.  The formula from which I got the name is:
  85. A+((4000&0xff00)|(2091&0x00ff))+patch.  ;-)
  86.  
  87.  
  88. What's needed
  89. -------------
  90. To use this patch you need an A4000 (A3000 may suffice I think) with Ami-
  91. gaOS 3.0, A2091 with 7.0 ROMs (6.6 should suffice I think), and  possibly
  92. at least 512K on your A2091 (If you haven't it Chip RAM will be used). Of
  93. course you need a SCSI device connected to your A2091.
  94.  
  95.  
  96. How to use
  97. ----------
  98. You can invoke this program via the Shell, via the Workbench and obvious-
  99. ly through WBStartup.  If invoked from the Shell it needs two parameters.
  100. The first is the buffer size, the second the  partition name, without the
  101. colon.  If instead you use the Workbench it accepts two tooltypes:
  102. BUFSIZE=xxxx, and PARTITION=xxxxx, without the colon.  When  the  program
  103. is invoked the first time it will  install  itself.  When it is invoked a
  104. second time it will remove itself.  Please read subsequent documentation!
  105. The bufsize parameter tells the program how big should be the buffer. The
  106. greater the buffer, the better the performance.  If you have Fast RAM  on
  107. the A2091 you should set bufsize to anything you desire, but a  bit  less
  108. than A2091's RAM size.  If you exceed this size the buffer will be put in
  109. Chip memory and things may slow down a bit.  If you have no  RAM  on  the
  110. A2091 there are no problems, chip RAM will be used.
  111. This program is able to patch only one partition.  I regret but I  didn't
  112. want to spend time making it more usable.  So I suggest to  install  only
  113. one partition  on  your  A2091's HD.  The partition is indicated with its
  114. Task name.  It is the partition name (i.e. QDH0, not MyHardDisk)  without
  115. the terminating colon.  Letter  casing  is  important  (QDh0 is different
  116. from QDH0).  Generally an A2091 Hard Disk is called with the first letter
  117. of the producer of the HD plus 'HD0'.  For instance a Quantum HD will  be
  118. called QDH0, while  a  Seagate will be called SDH0.  Avoid to set buffers
  119. too small.  Acceptable sizes are generally in the range 65536-262144.
  120.  
  121.  
  122. How it works
  123. ------------
  124. A4091patch SetFunction()s the Read() and Write() routines of dos.library.
  125. When it is called a second time it will remove the patches.  Beware,  be-
  126. cause if  someone else patched Read() or Write() your system will  go  in
  127. a confused state.  Probably it will hang.  So decide if you want  to  use
  128. A4091patch and avoid removing it.
  129. The idea behind A4091patch is very simple.  I will describe how Read() is
  130. patched, since Write() is almost equal, except the relative positions  of
  131. CopyMem() and Write().  When an application issues a Read() on  a patched
  132. system it will fall into A4091patch's read().  If the transfer is  direc-
  133. ted towards 24 bit DMAble memory read() will call directly Read().  So we
  134. leave DMAble  transfers to  the  dos.library.  Now remain  only Zorro III
  135. transfers.  If  the  drive  towards which the command is issued isn't the
  136. patched drive read() will fall into Read().  Now  remain  only  Zorro III
  137. transfers from the patched drive.  So if the length of the transfer  fits
  138. into the buffer a single Read() will be issued from the HD to the buffer,
  139. and then  data will be moved via CopyMem() from the buffer to the correct
  140. Zorro III destination.  If the length exceeds the size of the buffer  the
  141. transfer will be broken into chunks fitting the buffer and data  will  be
  142. alternatively Read()ed to the buffer and CopyMem()ed to the destination.
  143. Errors will be correctly managed, registers are preserved, and the setpa-
  144. tached Read() and Write() seem indistinguishable  from  the  originals to
  145. the general application  and  to  the OS.  The Amiga OS modularity allows
  146. this.  Thank you Amiga.
  147.  
  148.  
  149. Reports
  150. -------
  151. In the file Speed.doc you can observe the DiskSpeed reports for the A2091
  152. HD, the RAM disk and  the internal IDE drive of the A4000, on patched and
  153. unpatched systems.  I include here only the most important values  regar-
  154. ding read transferring rates:
  155.  
  156. Hard Disk  Unpatcd CPU Patched   CPU
  157. ---------- ------- --- --------- ---
  158. A4000 IDE   504123 62%    677958 50%
  159. A2091 SCSI   47788  1%    461142 49%
  160. RAM Disk   3772792  0%   3768116  0%
  161.  
  162. Notice the tremendous increment on A2091 speed and the drop in CPU usage,
  163. the slight slowdown of RAM disk, and the sluggish increment on IDE speed,
  164. togheter with a small drop in CPU usage of the IDE drive.  The IDE resul-
  165. ts don't make much sense, since the disk was higly fragmented  and  since
  166. I am not properly sure of DiskSpeed's accuracy with IDE drives.
  167.  
  168.  
  169. Thanks
  170. ------
  171. I wish to thank Ettore Caurla for his phone support as Italian developers
  172. support manager and Randell Jesup for his attention.  Mike Sinz  is  also
  173. included as the author of DiskSpeed.  I wish also include the  Amiga  for
  174. being the best computer.
  175.